The process and consequences of eviction have become high-profile issues in public discourse over the past several years. Being evicted causes major disruptions to people’s lives, with cascading and often lasting impacts on the ability to secure new housing, stay employed, and keep families together. During the first year of the COVID-19 pandemic, the moratoria on no-cause evictions from the CDC and state and local governments explicitly acknowledged the importance of stable housing on individual and public health and—at least temporarily—brought eviction to the forefront of national news.
Despite this increased attention, data sources on evictions are often difficult to access and inconsistent across different jurisdictions. Especially little is known about evictions filed against residents of regulated affordable housing.
Regulated, or “Big A”, affordable housing describes properties whose rents are capped according to federal rules, or whose tenants receive direct or indirect subsidies from public sources. Affordable housing is intended to be a place where low-income people can rent decent housing that they may not otherwise be able to afford or qualify for in the broader housing market. In this way, most people think of affordable housing as relatively stable—for many, it is the housing of last resort.
Yet residents of affordable housing can also be served with evictions. For people who already have difficulty accessing housing, or have particularly limited options in tight housing markets, evictions can have devastating effects. Examining trends in evictions in regulated affordable housing is an important first step to understanding how well our publicly-supported housing serves its residents and fulfills its mission to create housing stability for lower-income people.
This analysis examines trends in evictions filed against residents of affordable housing in Multnomah County between January 2019 and October 2022. We thank the Evicted in Oregon collective—particularly Dr. Lisa Bates and Dr. Azad Amir-Ghassemi—for sharing their data with us for this project. Evicted in Oregon built this data set from disparate sources and conducted some initial cleaning and compiling. Much of our analysis went deeper into cleaning and sorting this data. We then pulled out some high-level trends and considered the data’s spatial dimensions.
We received two data sets from Evicted in Oregon:
As shown below, each original csv contained data stored primarily as character strings. Because of this format, many of the values were inconsistent across different observations, even when they should match, such as with property address, or owner name. There were also many missing values, captured as either NA or “—”.
## Rows: 45,497
## Columns: 38
## $ case_code <chr> "20LT00017", "20LT00025", "20LT00026", "20LT0002…
## $ date.x <chr> "1/2/20", "1/2/20", "1/2/20", "1/2/20", "1/2/20"…
## $ Oregon_Moratorium <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ Multnomah_Moratorium <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ status <chr> "Closed", "Closed", "Closed", "Closed", "Closed"…
## $ location.x <chr> "Multnomah", "Multnomah", "Multnomah", "Multnoma…
## $ plaintiff_name <chr> "Ash Street Courtyard LLC; Stark Firs Management…
## $ defendant_addr <chr> "<U+00A0><U+00A0>12026 SE Ash Street, Unit Numbe…
## $ Agent_Name <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ tenant_lawyer <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, …
## $ landlord_lawyer <chr> "Jeffrey S Bennett; Anna S Mccormack", NA, "Marc…
## $ landlord_has_lawyer <dbl> 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, …
## $ tenant_has_lawyer <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ month <chr> "1/1/20", "1/1/20", "1/1/20", "1/1/20", "1/1/20"…
## $ zip <chr> "97216", "97211", "97209", "97233", "97216", "97…
## $ judgment <chr> "Judgment - General Dismissal", "Judgment - Gene…
## $ Judgment_General <dbl> 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, …
## $ Judgment_Dismissal <dbl> 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, …
## $ Judgment_Creates_Lien <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ FA <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ SA <dbl> 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, …
## $ writ <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, …
## $ Default <dbl> 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, …
## $ OPEN <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ PENDING <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ CLOSED <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ AGENT <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ SubReg <dbl> 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, …
## $ OAHI <dbl> 0, NA, 1, 1, NA, NA, NA, NA, NA, NA, 1, 0, NA, N…
## $ NHPD <dbl> 1, NA, 1, 1, NA, NA, NA, NA, NA, NA, 1, 0, NA, N…
## $ Metro <dbl> 1, NA, 1, 1, NA, NA, NA, NA, NA, NA, 1, 1, NA, N…
## $ HUD <dbl> 0, NA, 0, 0, NA, NA, NA, NA, NA, NA, 0, 0, NA, N…
## $ USDA <dbl> 1, NA, 1, 1, NA, NA, NA, NA, NA, NA, 1, 1, NA, N…
## $ Units <dbl> 47, NA, 199, 70, NA, NA, NA, NA, NA, NA, 199, 84…
## $ AssistedUnits <dbl> 47, NA, 199, 70, NA, NA, NA, NA, NA, NA, 199, 84…
## $ Owner <chr> "ASH STREET, LLC", NA, "Home Forward", "Human So…
## $ OwnerType <chr> "FOR_PROFIT", NA, "HOUSING AUTHORITY", "Non-Prof…
## $ Management <chr> "CASCADE MANAGEMENT INC", NA, "HOUSING AUTHORITY…
## Rows: 524
## Columns: 81
## $ addr.y <chr> "10 N WEIDLER ST 97227", "10 NW BROADWAY 972…
## $ total_FEDs <dbl> 15, 34, 3, 3, 1, 12, 2, 3, 4, 7, 2, 14, 2, 1,…
## $ `Jan2019-March2020` <dbl> 6, 20, 2, 3, 0, 10, 2, 3, 0, 5, 2, 5, 0, 0, 1…
## $ `March2020-July2021` <dbl> 4, 6, 0, 0, 1, 0, 0, 0, 0, 2, 0, 1, 0, 0, 1, …
## $ `July2021-Nov2022` <dbl> 5, 8, 1, 0, 0, 2, 0, 0, 4, 0, 0, 8, 2, 1, 1, …
## $ OAHI <dbl> 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, …
## $ NHPD <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, …
## $ Metro <dbl> 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, …
## $ HUD <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, …
## $ USDA <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ AddressNumber <dbl> 10, 10, 100, 100, 100, 100, 1002, 10025, 1003…
## $ StreetNamePreDirectional <chr> "N", "NW", "E", "E", "N", "NE", "SE", "SW", "…
## $ StreetName <chr> "WEIDLER", "BROADWAY", "11TH", "CAROLINA", "G…
## $ StreetNamePostType <chr> "ST", NA, "AVE", "ST", "ST", "AVE", "DR", "AV…
## $ City <chr> "PORTLAND", "PORTLAND", "EUGENE", "LEBANON", …
## $ State <chr> "OR", "OR", "OR", "OR", "OR", "OR", "OR", "OR…
## $ ZipCode <dbl> 97227, 97209, 97401, 97355, 97501, 97220, 975…
## $ County <chr> "MULTNOMAH", "MULTNOMAH", "LANE", "LINN", "JA…
## $ Name <chr> "MADRONA STUDIOS A", "HELEN ANN SWINDELLS BLD…
## $ Units <dbl> 132, 105, 54, 16, 50, 61, 50, 32, 253, 39, 24…
## $ AssistedUnits <dbl> 132, 105, 54, 2, 49, 60, 49, 11, 253, 6, 23, …
## $ Owner <chr> "Central City Concern", "Home Forward", "St V…
## $ OwnerType <chr> "NON_PROFIT", "HOUSING AUTHORITY", "Non-Profi…
## $ Management <chr> "CENTRAL CITY CONCERN", "HOUSING AUTHORITY OF…
## $ ACCESSIBLE.COUNT <dbl> 3, NA, NA, 2, 0, NA, NA, NA, NA, NA, NA, NA, …
## $ PSH.COUNT <dbl> 13, NA, NA, NA, 0, NA, NA, NA, NA, NA, NA, NA…
## $ ELD.COUNT <dbl> 0, 102, 0, 16, 0, NA, NA, NA, NA, 0, NA, 0, N…
## $ FAM.COUNT <dbl> 0, 0, 54, 16, 36, NA, NA, NA, NA, 39, NA, 59,…
## $ HIV.COUNT <dbl> 0, 0, 0, 0, 0, NA, NA, NA, NA, 0, NA, 0, NA, …
## $ HOM.COUNT <dbl> 13, 102, 0, 0, 0, NA, NA, NA, NA, 0, NA, 0, N…
## $ PD.COUNT <dbl> 0, 0, 0, 0, 0, NA, NA, NA, NA, 0, NA, 0, NA, …
## $ SUD.COUNT <dbl> 13, 0, 0, 0, 0, NA, NA, NA, NA, 0, NA, 0, NA,…
## $ VETS.COUNT <dbl> 0, 0, 0, 0, 0, NA, NA, NA, NA, 0, NA, 0, NA, …
## $ WKFC <dbl> 0, 0, 0, 0, 0, NA, NA, NA, NA, NA, NA, 0, NA,…
## $ HTF <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ OHCS.HOME <chr> "---", "---", "---", "7/19/40", "8/3/77", NA,…
## $ HUD.MF <chr> "---", "---", "---", "51043", "---", NA, NA, …
## $ USDA.RD <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ LIHTC.9....1. <chr> "2/1/71", "1/1/53", "1/1/55", "---", "9/1/77"…
## $ LIHTC.9....2. <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ LIHTC.4. <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ OAHTC <chr> "46048", "---", "45446", "45200", "50248", NA…
## $ LIFT <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ OHCS.BONDS <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ GHAP <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ HDGP <chr> "62121", "56190", "55880", "50625", "---", NA…
## $ OHCS.GRANTS <chr> "---", "---", "---", "---", "---", NA, NA, NA…
## $ LATEST <chr> "2/1/71", "11/2/53", "1/1/55", "7/19/40", "9/…
## $ HOUSING.TYPE <chr> "RENTAL HOUSING", "RENTAL HOUSING", "RENTAL H…
## $ Market.Rate.Units <chr> "0", "-", "-", "-", "0", NA, NA, NA, NA, "-",…
## $ X80..AMI.Units <chr> "0", "-", "-", "-", "0", NA, NA, NA, NA, "-",…
## $ X60..AMI.Units <chr> "12", "-", "-", "-", "13", NA, NA, NA, NA, "-…
## $ X50..AMI.Units <chr> "0", "-", "-", "-", "36", NA, NA, NA, NA, "-"…
## $ X40..AMI.Units <chr> "120", "-", "-", "-", "0", NA, NA, NA, NA, "-…
## $ X30..AMI.Units <chr> "0", "-", "-", "-", "0", NA, NA, NA, NA, "-",…
## $ No.Income <chr> "0", "-", "-", "-", "0", NA, NA, NA, NA, "-",…
## $ TargetTenantType <chr> "Homeless", "Elderly or disabled", "Family", …
## $ S8_1_Status <chr> NA, NA, NA, "Active", NA, NA, NA, "Active", N…
## $ S8_1_ProgramName <chr> NA, NA, NA, "811 PRA DEMO", NA, NA, NA, "LMSA…
## $ S202_1_Status <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ S202_1_ProgramName <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ S236_1_Status <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ S236_1_ProgramName <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ FHA_1_Status <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ FHA_1_ProgramName <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ LIHTC_1_Status <chr> "Active", "Active", "Active", NA, NA, "Active…
## $ LIHTC_1_ProgramName <chr> NA, "9% Tax Credit", "9% Tax Credit", NA, NA,…
## $ RHS515_1_Status <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ RHS515_1_ProgramName <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ RHS538_1_Status <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ RHS538_1_ProgramName <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ HOME_1_Status <chr> NA, NA, NA, "Active", "Active", "Active", NA,…
## $ HOME_1_ProgramName <chr> NA, NA, NA, "HOME", "HOME", "HOME", NA, "HOME…
## $ PH_1_Status <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ PH_1_ProgramName <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ State_1_Status <chr> "Active", "Active", "Active", "Active", "Acti…
## $ State_1_ProgramName <chr> "OR State subsidy", "OR State subsidy", "OR S…
## $ Pbv_1_Status <chr> NA, NA, NA, NA, "Active", NA, NA, NA, NA, NA,…
## $ Pbv_1_ProgramName <chr> NA, NA, NA, NA, "Project Based Vouchers", NA,…
## $ Mr_1_Status <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
## $ Mr_1_ProgramName <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
To narrow the focus of our cleaning and analytical efforts, we focused only on eviction cases in Multnomah County. Per Evicted in Oregon member Dr. Bates, Multnomah County’s eviction records are the most complete and consistent. We also limited our analysis to cases that had been closed—that is, cases that had ended in eviction or dismissal—so we could look at trends in case outcomes. This means we did exclude some cases that were filed but not resolved within the timeframe of the dataset.
With those parameters, we narrowed the dataset of eviction case records to 1,606 observations, as shown below. The final number of property records was 524.
## # A tibble: 1,606 × 39
## case_code date oregon…¹ multn…² locat…³ plain…⁴ plain…⁵ plain…⁶ plain…⁷
## <chr> <date> <dbl> <dbl> <chr> <chr> <chr> <chr> <chr>
## 1 20LT00017 2020-01-02 0 0 Multno… Ash St… Ash St… " Star… <NA>
## 2 20LT00026 2020-01-02 0 0 Multno… Income… Income… " Pear… <NA>
## 3 20LT00028 2020-01-02 0 0 Multno… Lincol… Lincol… " Pinn… <NA>
## 4 20LT00087 2020-01-03 0 0 Multno… Income… Income… " Pear… <NA>
## 5 20LT00088 2020-01-03 0 0 Multno… Portla… Portla… <NA> <NA>
## 6 20LT00115 2020-01-06 0 0 Multno… Quantu… Quantu… " Unth… <NA>
## 7 20LT00121 2020-01-06 0 0 Multno… Centra… Centra… " Haze… <NA>
## 8 20LT00122 2020-01-06 0 0 Multno… Cascad… Cascad… " Lone… <NA>
## 9 20LT00174 2020-01-08 0 0 Multno… Reach … Reach … " Reac… <NA>
## 10 20LT00175 2020-01-08 0 0 Multno… Centra… Centra… " Haze… <NA>
## # … with 1,596 more rows, 30 more variables: defendant_addr <chr>,
## # street_unit <chr>, street <chr>, unit <chr>, city <chr>, state <chr>,
## # zip <chr>, landlord_has_lawyer <chr>, tenant_has_lawyer <chr>, month <chr>,
## # eviction <chr>, dismissal <chr>, lien <chr>, fa <dbl>, sa <chr>,
## # writ <chr>, default <chr>, agent <dbl>, units <dbl>, assisted_units <dbl>,
## # owner <chr>, owner_type <chr>, management <chr>, lat <dbl>, long <dbl>,
## # owner_clean <chr>, outcome <chr>, management_clean <chr>, …
We attempted to convert the raw data from these two sources into tidy formats in order to be able to run statistical analyses. This process required transforming the values of several variables through rewriting. We used a combination of replacement tools from the stringr, dplyr, lubridate, and forcats packages to create consistent character strings or change the variable types. Because of the extensive code such rewriting required, we decided to focus on three primary character variables: owner type, owner, and management company. Examples of this processing are shown below:
# Clean values: owner_type
subreg_mult <- subreg_mult %>% #rewrite similar values
mutate(owner_type = case_when(
owner_type %in% c("non_profit", "non-profit", "limited dividend") ~ "nonprofit",
owner_type %in% c("for_profit", "profit") ~ "for profit",
owner_type %in% c("housing authority", "government") ~ "public entity",
owner_type == owner_type & owner == "home forward" ~ "public entity",
TRUE ~ owner_type))
# Create new column with cleaner OWNER names
subreg_mult <- subreg_mult %>%
mutate(owner_clean =
str_replace_all(owner, c(
"\\." = "",
"," = "",
"cascadia behavioral healthcare inc\\s.*$" = "cascadia behavioral healthcare inc",
"home forward\\s.*$" = "home forward",
"human solutions\\s.*$" = "human solutions",
"hacienda community development\\s.*$" = "hacienda community development",
"specialized housing\\s.*$" = "specialized housing inc",
"quadriplegics united against dependency\\s.*$" = "quadriplegics united against dependency",
"reach community development\\s.*$" = "reach community development",
"central city housing llc" = "central city concern",
"cascade housing association\\s.*$" = "cascade housing association",
"bell david.*$" = "david bell",
"heartland columbia.*$" = "heartland columbia",
"brenneke tom (gm buckman heights llc)" = "tom brenneke",
"limited partnership" = "lp",
"menashe michael" = "michael menashe",
"housing authority of portland" = "home forward"
)))
Each observation in our primary data set represents one eviction case filed in court. The primary variable we considered was the outcome of that case, simplified between whether the eviction was carried out or not. There are several intermediate steps and statuses that a case can have between filing and closure, including stipulated agreement, if a lien was placed on the property, if a judge issued a writ, etc. For this analysis, we focused on the final outcome.
The owner variable describes the registered owner of a property. This value was often inconsistent with other indications of ownership, such as the name of the plaintiff in the eviction filing. Many properties are registered to an LLC whose only asset is that single property, though the LLC itself may be owned by a larger entity. These inconsistencies made it hard to draw conclusions about total ownership and control of properties across the county without more detailed mapping of property and owner relationships.
## # A tibble: 110 × 2
## owner_clean n
## <chr> <int>
## 1 9101 foster llc 6
## 2 a phillips square 1
## 3 alberta simmons senior housing 1
## 4 alberta street apartments preservation 1
## 5 aldercrest llc 7
## 6 alpine east inc 5
## 7 armstrong stafford llc 4
## 8 artspace projects inc 2
## 9 ash street llc 31
## 10 brenneke tom (gm buckman heights llc) 6
## # … with 100 more rows
The management variable describes the entity that is registered with the county or state as responsible for the day-to-day management of the property and handling tenant services. This variable was also inconsistently entered, even for eviction cases that were linked to the same property. For some cases, the property owner was listed as the manager; in others, management was contracted out to another company. As with property owners, inconsistency in this variable made it difficult to accurately observe trends in the relationship between eviction cases and property management.
## # A tibble: 64 × 2
## management_clean n
## <chr> <int>
## 1 affinity property management 7
## 2 anchor nw property group 9
## 3 bh lp 6
## 4 brian mccarl & co 10
## 5 caritas housing initiatives llc 3
## 6 cascade management inc 118
## 7 cascadia behavioral healthcare inc 87
## 8 cedar sinai park 2
## 9 central city concern 188
## 10 coda 2
## # … with 54 more rows
The owner type variable describes the category to which the property owner belongs, according to the state’s classification system. This variable originally had inconsistency in its formatting, but we were able to narrow it down to 7 classes. We further consolidated these into the categories for profit, multiple, nonprofit, and public entity. Additionally, there were 13 cases for which we could not accurately assign ownership; these were excluded from our analysis.
## # A tibble: 5 × 2
## owner_type n
## <chr> <int>
## 1 for profit 408
## 2 multiple 32
## 3 nonprofit 804
## 4 public entity 349
## 5 <NA> 13
As a first step, we tried to see how many evictions were filed each month in regulated affordable housing in the study period. We then disaggregated these counts by owner type.
It is important to note that the steep drop in eviction cases filed starting in March 2020 reflects the beginning of the COVID-19 pandemic and then the State of Oregon’s moratorium on no-cause evictions. The moratorium began on April 1, 2020 and ended on June 30, 2021. Parallel moratoria in Portland and Multnomah County expired earlier, in February 2021. Protections from eviction for nonpayment of rent continued until June 30, 2022.
Eviction filings did not drop to zero because the moratorium allowed evictions to be filed “for cause.” For cause evictions require landlords to claim that tenants have violated a term of the lease. The state moratorium exempted nonpayment of rent from the allowable list of causes.
The graph shows that eviction filings declined across all owner types during the moratorium. Evictions initiated by for profit landlords decreased dramatically as a share total filings. Our datasets did not include information on the causes listed in these eviction filings; linking cases to the cited cause would allow a closer analysis of the most common reasons tenants are being evicted from regulated affordable housing.
We also looked at trends in the outcomes of eviction filings. Of each of these closed cases, 685 filings resulted in executed evictions, while 800 cases were dismissed. The remaining 108 cases had other outcomes. It is not always clear what these other outcomes are, but they could include tenants moving out without a formal eviction ruling.
Grouping these outcomes by owner type shows some interesting trends in eviction outcomes. Public entities, which include the Portland Housing Bureau and the region’s public housing authority, Home Forward, filed 349 evictions, of which 48 percent resulted in evictions. This was the highest rate of executed evictions during the study period. More than 800 eviction cases were filed by nonprofit owners of affordable housing, of which 45 percent were executed.
We next decided to map eviction filings in order to both observe spatial patterns and create a tool for investigating these evictions by property. This process involved geocoding the dataset of regulated affordable properties using the tidygeocoder package with a Google API. We then joined this with the eviction filings data (matched by street address) in order to maximize the amount of information aggregated at the property level. Leaflet was used to map the properties, rendered by owner type (color) and number of total eviction filings (circle radius). Clickable pop-ups were generated to display key property and eviction information Given Multnomah County’s involvement in overseeing housing and homeless services, County Commissioner Districts were underlaid using the simple features package.
#Create Leaflet map
property_map <- leaflet() %>%
addProviderTiles("CartoDB.Positron") %>%
addPolygons(data = county_d, color = "navy", fillOpacity = 0.1, weight = 2) %>%
addCircles(data = joined_df_short, lng = ~long.x, lat = ~lat.x,
color = ~pal(owner_type.y),
radius = ~total_feds_rev * 4,
popup = paste(
joined_df_short$name, "<br>",
joined_df_short$full_address, "<br>",
"Owner:", joined_df_short$owner_map, "<br>",
"Management:", joined_df_short$management_map, "<br>",
"Owner Type:", str_to_title(joined_df_short$owner_type.y), "<br>",
"Units:", joined_df_short$units.x,
paste0("(",joined_df_short$assisted_units.x," assisted)"), "<br>",
"Filings:", joined_df_short$total_feds_rev, "<br>",
"Evictions:", joined_df_short$total_evictions
)) %>%
addLegend(data = joined_df_short, "topright", pal = pal,
values = ~owner_type.y,
title = "Property Owner Type",
opacity = 1) %>%
addLegend(data = county_d, "bottomright", color = "navy",
opacity = 1,
label = "Multnomah County Districts")
We also produced tables of basic eviction statistics by property, owner, and management company. This allows for an alternative method of examining properties where evictions are occurring, and begins to explore who is evicting and the process of their evictions. While more research is needed to rectify inconsistencies in owner and management reporting, as well as tease out shell companies, this serves as a starting point. Counts and percentages (out of total filings per entity) were calculated for outcomes - i.e. evictions and dismissals - as well as for accompanied processes, including stipulated agreements, liens, writs, and defaults. (See Evicted in Oregon’s explanation of How Evictions Work to learn more about these terms.)
# Create tibble of outcome statistics by PROPERTY
source("geocoding and map.R")
property_stats <- joined_df_short %>%
group_by(full_address) %>%
summarize(owner_clean = first(owner_clean),
total_filings = n(),
owner_clean = first(owner_clean),
evictions = sum(eviction == "yes"),
p_e = sum(eviction == "yes")/n(),
dismissals = sum(dismissal == "yes"),
p_di = sum(dismissal == "yes")/n(),
default. = sum(default == "yes"),
p_de = sum(default == "yes")/n(),
stipulated_agreement = sum(sa == "yes"),
p_sa = sum(sa == "yes")/n(),
lien. = sum(lien == "yes"),
p_l = sum(lien == "yes")/n(),
writ. = sum(writ == "yes"),
p_w = sum(writ == "yes")/n()) %>%
arrange(desc(evictions)) %>%
filter(!is.na(full_address))
The DT package was used to format the tables in a more readable, web-friendly way that allows for sorting and searching.
This analysis shows, for example, that the property with the highest number of filings (52) and executed evictions (29) was the nonprofit-owned Clifford Apartments in Southeast Portland. This means that 56 percent of the cases filed by this property resulted in eviction. This is higher than the rate of executed evictions for nonprofits as a whole (48 percent).
Example of table produced by the above code:
An important precursor for further analysis is to verify all the property information, including ownership, corporate structure, and management. This detailed cleaning and relating would allow better analysis of property-level and owner-level trends.
Incorporating the causes listed in each eviction filing would also allow any trends in issues that lead to eviction filings and what is more or less likely to make a case end in an executed eviction.
Another avenue for deeper exploration is looking at the affordability levels and types of units for which these cases are being filed and succeeding. If there are trends in higher cases against lower-income people, or in certain types of housing, like permanent supportive housing, or family housing, this analysis could point toward policy interventions to improve housing stability.